
$(document).ready(function() {
	jQuery(function($){
		$.datepicker.regional['es'] = {
			closeText: 'Cerrar',
			prevText: 'Anterior',
			nextText: 'Siguiente;',
			monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
			'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
			dayNames: ['Domingo','Lunes','Martes','Mi&eacute;rcoles','Jueves','Viernes','S&aacute;bado'],
			dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'],
			weekHeader: 'Sm',
			dateFormat: 'dd/mm/yy',
			firstDay: 1,
			isRTL: false,
			showMonthAfterYear: false,
			numberOfMonths: 2,
			minDate: 0,
			maxDate: 90,
			yearSuffix: ''};
		$.datepicker.setDefaults($.datepicker.regional['es']);
	});

	//creamos el calendario jquery que aparecerá cuando el usuario pulse sobre el campo 'Fecha de vencimiento'
	$("#dueDate").datepicker();

	//buscamos el campo de texto para introducir un nuevo fichero y lo deshabilitamos
	var inputs = document.getElementsByTagName("input");
	var len = inputs.length;
	for (i=0 ; i < len ; i++) {
		if (inputs[i].getAttribute("class") != null) {
			if (inputs[i].getAttribute("class").indexOf("file") != -1) {
				inputs[i].disabled = true;
				break;
			}
		}
	}

	//deshabilitamos el campo de la primera respuesta, ya que por defecto está seleccionado el tipo 'Respuesta abierta'
	document.getElementsByName("answer1")[0].disabled = true;
});


/**
  * ESPECIFICACIÓN: Función que oculta el campo correspondiente para seleccionar el fichero con el censo
  **/
function hideChooser() {
	document.getElementById("chooser").setAttribute("style", "display: none");
}


/**
  * ESPECIFICACIÓN: Función que muestra el campo correspondiente para seleccionar el fichero con el censo
  **/
function displayChooser() {
	document.getElementById("chooser").setAttribute("style", "display: inline");
}


/**
  * ESPECIFICACIÓN: Función que muestra, junto al checkbox correspondiente, si se ha seleccionado
  * que la encuesta será anónima o no
  **/
function showState() {
	if (document.getElementById("anonymous").checked) {
		document.getElementById("anonymousSelec").innerHTML = "S&iacute;";
	} else {
		document.getElementById("anonymousSelec").innerHTML = "No";
	}
}

function addNewQuestion() {
	//comprobamos si todas las respuestas están indicadas. En caso contrario, le indicamos al usuario
	//que deberá introducir antes el valor de todas las respuestas
	var questions = document.getElementsByName("surveyQuestion");
	var ultimoIdQuestion = parseInt(document.getElementsByName("surveyQuestion")[questions.length-1].getAttribute("id"));

	//obtenemos el total de respuestas actual
	var answers = document.getElementsByName("answer"+ultimoIdQuestion);
	var len = answers.length;


	//si la pregunta está introducida, comprobamos las respuestas
	if (document.getElementsByName("question"+ultimoIdQuestion)[0].value != '') {
		var emptys = false;
		//recorremos todos las respuestas hasta llegar a la última, comprobando cada una si está vacía (si no es una respuesta abierta)
		if (document.getElementsByName("kindAnswerSelector"+ultimoIdQuestion)[0].value.indexOf("Respuesta abierta") == -1) {
			for (i=0 ; i < len ; i++) { 
				if (answers[i].value == '') {
					emptys = true;
					break;
				}
			}
		}

		if (! emptys) {
			var divSurveyQuestion = document.createElement("div");
			divSurveyQuestion.setAttribute("name", "surveyQuestion");
			divSurveyQuestion.setAttribute("class", "surveyQuestion");
			var questions = document.getElementsByName("surveyQuestion");
			var ultimoIdQuestion = parseInt(document.getElementsByName("surveyQuestion")[questions.length-1].getAttribute("id"));
			divSurveyQuestion.setAttribute("id", ultimoIdQuestion+1);

			//ocultamos el icono de añadir pregunta de la última pregunta insertada
			var addQuestionImages = document.getElementsByName("addQuestion");
			document.getElementsByName("addQuestion")[addQuestionImages.length-1].setAttribute("style", "display: none");

			//ocultamos el icono de eliminar pregunta de la última pregunta insertada
			var delQuestionImages = document.getElementsByName("delQuestion");
			document.getElementsByName("delQuestion")[delQuestionImages.length-1].setAttribute("style", "display: none");

			//deshabiltamos todos los controles de la pregunta anterior para que no se pueda modificar
			var questionsTexfield = document.getElementsByName("groupingQuestions");
			var lastQuestion = document.getElementsByName("groupingQuestions")[questionsTexfield.length-1];
			var childrens = lastQuestion.childNodes;
			for(var i=0 ; i<childrens.length ; i++) {
				if (childrens[i].tagName == "DIV") {
					var childrensDiv = childrens[i].childNodes;
					for(var j=0 ; j<childrensDiv.length ; j++) {
						childrensDiv[j].disabled = true;
					}
				}
			}

			/** A continuación creamos cada uno de los elementos que formarán la nuevo pregunta **/
			var fieldset = document.createElement("fieldset");
			fieldset.setAttribute("name", "groupingQuestions");
			fieldset.setAttribute("class", "groupingQuestions");

			var divQuestion = document.createElement("div");
			divQuestion.setAttribute("class", "question");
			var labelQuestion = document.createElement("label");
			labelQuestion.innerHTML = "Pregunta:";
			var inputQuestion = document.createElement("input");
			inputQuestion.setAttribute("name", "question"+(ultimoIdQuestion+1));
			inputQuestion.setAttribute("class", "surveyTextfieldLarge");
			divQuestion.appendChild(labelQuestion);
			divQuestion.appendChild(inputQuestion);

			var divAnswers = document.createElement("div");
			divAnswers.setAttribute("name", "answers"+(ultimoIdQuestion+1));
			divAnswers.setAttribute("class", "answers");

			var labelKindAnswer = document.createElement("label");
			labelKindAnswer.setAttribute("class", "answerKind");
			labelKindAnswer.innerHTML = "Tipo respuesta:";

			var selectKindAnswers = document.createElement("select");
			selectKindAnswers.setAttribute("name", "kindAnswerSelector"+(ultimoIdQuestion+1));
			selectKindAnswers.setAttribute("class", "select answerSelector");
			selectKindAnswers.setAttribute("onchange", "kindAnswerSelected()");
			var optionSelect1 = document.createElement("option");
			optionSelect1.innerHTML = "Respuesta abierta";
			var optionSelect2 = document.createElement("option");
			optionSelect2.innerHTML = "Monorespuesta";
			var optionSelect3 = document.createElement("option");
			optionSelect3.innerHTML = "Multirespuesta";
			selectKindAnswers.appendChild(optionSelect1);
			selectKindAnswers.appendChild(optionSelect2);
			selectKindAnswers.appendChild(optionSelect3);

			var imgAdd = document.createElement("img");
			imgAdd.setAttribute("id", "addAnswer"+(ultimoIdQuestion+1));
			imgAdd.setAttribute("name", "addAnswer"+(ultimoIdQuestion+1));
			imgAdd.setAttribute("class", "addAnswer");
			imgAdd.setAttribute("src", "images/add.gif");
			imgAdd.setAttribute("title", "A&ntilde;adir respuesta");
			imgAdd.setAttribute("onclick", "addNewAnswer()");

			var imgDel = document.createElement("img");
			imgDel.setAttribute("id", "delAnswer"+(ultimoIdQuestion+1));
			imgDel.setAttribute("name", "delAnswer"+(ultimoIdQuestion+1));
			imgDel.setAttribute("class", "delAnswer");
			imgDel.setAttribute("src", "images/delete.png");
			imgDel.setAttribute("title", "Eliminar respuesta");
			imgDel.setAttribute("onclick", "deleteAnwer()");

			var inputAnswer = document.createElement("input");
			inputAnswer.setAttribute("name", "answer"+(ultimoIdQuestion+1));
			inputAnswer.setAttribute("class", "answer");
			inputAnswer.disabled = true;

			var imgDelAllEmpty = document.createElement("img");
			imgDelAllEmpty.setAttribute("id", "delAllAnswers"+(ultimoIdQuestion+1));
			imgDelAllEmpty.setAttribute("name", "delAllAnswers"+(ultimoIdQuestion+1));
			imgDelAllEmpty.setAttribute("class", "delAllAnswers");
			imgDelAllEmpty.setAttribute("src", "images/delAllAnswers.png");
			imgDelAllEmpty.setAttribute("title", "Eliminar todas las respuestas en blanco");
			imgDelAllEmpty.setAttribute("onclick", "deleteEmptyAnwers()");

			divAnswers.appendChild(labelKindAnswer);
			divAnswers.appendChild(selectKindAnswers);
			divAnswers.appendChild(imgAdd);
			divAnswers.appendChild(imgDel);
			divAnswers.appendChild(inputAnswer);
			divAnswers.appendChild(imgDelAllEmpty);

			fieldset.appendChild(divQuestion);
			fieldset.appendChild(divAnswers);

			var imgAddQuestion = document.createElement("img");
			imgAddQuestion.setAttribute("id", "addQuestion");
			imgAddQuestion.setAttribute("name", "addQuestion");
			imgAddQuestion.setAttribute("class", "addQuestion");
			imgAddQuestion.setAttribute("src", "images/add.gif");
			imgAddQuestion.setAttribute("title", "A&ntilde;adir pregunta");
			imgAddQuestion.setAttribute("onclick", "addNewQuestion()");

			var imgDelQuestion = document.createElement("img");
			imgDelQuestion.setAttribute("id", "delQuestion");
			imgDelQuestion.setAttribute("name", "delQuestion");
			imgDelQuestion.setAttribute("class", "delQuestion");
			imgDelQuestion.setAttribute("src", "images/delete.png");
			imgDelQuestion.setAttribute("title", "Eliminar pregunta");
			imgDelQuestion.setAttribute("onclick", "deleteQuestion()");

			divSurveyQuestion.appendChild(fieldset);
			divSurveyQuestion.appendChild(imgAddQuestion);
			divSurveyQuestion.appendChild(imgDelQuestion);

			//Una vez creado toda la estructura de componentes de la nueva pregunta, la insertamos en su lugar 
			//correspondiente
			document.getElementById("components").appendChild(divSurveyQuestion);

			//aumentamos el ancho de la página
			var num = parseInt(document.getElementById("content").getAttribute("height"))+125;
			document.getElementById("content").setAttribute("height", num);
			document.getElementById("content").setAttribute("style", "height: " + num);
		} else {
			//mostramos el mensaje de error correspondiente
			alert("Debes rellenar todas las respuestas o eliminar alguna antes de insertar una nueva pregunta");
		}
	} else {
		//mostramos el mensaje de error correspondiente
		alert("Debes rellenar la pregunta actual antes de insertar una nueva");
	}
}


function deleteQuestion() {
	//eliminamos la capa correspondiente que forma la última pregunta insertada
	numQuestions = document.getElementsByName("surveyQuestion").length;
	if (numQuestions > 1) {
		var padre = document.getElementById(numQuestions).parentNode;
		padre.removeChild(document.getElementById(numQuestions));

		//mostramos los botones de insertar y eliminar preguntas situados junto a la última pregunta actual
		var addQuestionImages = document.getElementsByName("addQuestion");
		document.getElementsByName("addQuestion")[addQuestionImages.length-1].setAttribute("style", "display: inline");
		var delQuestionImages = document.getElementsByName("delQuestion");
		document.getElementsByName("delQuestion")[delQuestionImages.length-1].setAttribute("style", "display: inline");

		//disminuimos el ancho de la página
		var num = parseInt(document.getElementById("content").getAttribute("height"))-125;
		document.getElementById("content").setAttribute("height", num);
		document.getElementById("content").setAttribute("style", "height: " + num);
	}

	//habilitamos todos los controles de la pregunta anterior para que se pueda modificar
	var questionsTexfield = document.getElementsByName("groupingQuestions");
	var lastQuestion = document.getElementsByName("groupingQuestions")[questionsTexfield.length-1];
	var childrens = lastQuestion.childNodes;
	for(var i=0 ; i<childrens.length ; i++) {
		if (childrens[i].tagName == "DIV") {
			var childrensDiv = childrens[i].childNodes;
			for(var j=0 ; j<childrensDiv.length ; j++) {
				if (childrensDiv[j].name == "kindAnswerSelector1") { 
					if (childrensDiv[j].value == "Respuesta abierta") {
						childrensDiv[j].disabled = false;
						break;
					}
				}
				childrensDiv[j].disabled = false;
			}
		}
	}
}

/**
  * ESPECIFICACIÓN: Función que añade un campo de texto (si todas las respuestas tiene algún valor) a  la capa
  * correspondiente, así como aumenta el ancho de la página para que el pie de página quede en su sitio
  **/
function addNewAnswer() {
	var questions = document.getElementsByName("surveyQuestion");
	var ultimoIdQuestion = parseInt(document.getElementsByName("surveyQuestion")[questions.length-1].getAttribute("id"));

	//creamos un nuevo cuadro de texto
	var input = document.createElement("input");
	input.setAttribute("type", "text");
	input.setAttribute("name", "answer"+ultimoIdQuestion);
	input.setAttribute("class", "answerAdded");
	input.setAttribute("style", "display: block; margin-top: 10px; margin-left: 300px");

	//insertamos el cuadro de texto creado anteriormente en la capa correspondiente
	document.getElementsByName("answers"+ultimoIdQuestion)[0].appendChild(input);

	//aumentamos el ancho de la pág/createSurvey.jspina
	var num = parseInt(document.getElementById("content").getAttribute("height"))+30;
	document.getElementById("content").setAttribute("height", num);
	document.getElementById("content").setAttribute("style", "height: " + num);
}

/**
  * ESPECIFICACIÓN: Función que elimina el último campo de texto que haya actualmente (en caso de que
  * haya más de uno), así como disminuye el ancho de la página para que el pie de página quede en su sitio
  **/
function deleteAnwer() {
	var questions = document.getElementsByName("surveyQuestion");
	var ultimoIdQuestion = parseInt(document.getElementsByName("surveyQuestion")[questions.length-1].getAttribute("id"));
	//obtener el total de respuestas actual
	var answers = document.getElementsByName("answer"+ultimoIdQuestion);
	var len = answers.length;

	//comprobamos si hay más de una respuesta
	if (len > 1) {
		var i;
		//recorremos todos las respuestas hasta llegar a la última
		for (i=0 ; i < len ; i++) { }

		//una vez nos hemos situado en la última respuesta, la eliminamos situándonos sobre el padre
		var padre = answers[i-1].parentNode;
		padre.removeChild(answers[i-1]);

		//disminuimos el ancho de la página
		var num = parseInt(document.getElementById("content").getAttribute("height"))-30;
		document.getElementById("content").setAttribute("height", num);
		document.getElementById("content").setAttribute("style", "height: " + num);
	}
}

/**
  * ESPECIFICACIÓN: Función que muestra los botones correspondientes en caso de seleccionar el tipo
  * 'Multirespuesta' o 'Monorespuesta'. Si la opción pulsada es 'Respuesta abierta', elimina todas las
  * posibles respuestas añadidas para dejar sólo una, así como esconde los botones de añadir y eliminar
  * respuestas.
  **/
function kindAnswerSelected() {
	var questions = document.getElementsByName("surveyQuestion");
	var ultimoIdQuestion = parseInt(document.getElementsByName("surveyQuestion")[questions.length-1].getAttribute("id"));
	if ((document.getElementsByName("kindAnswerSelector"+ultimoIdQuestion)[0].value.indexOf("Monorespuesta") != -1) || (document.getElementsByName("kindAnswerSelector"+ultimoIdQuestion)[0].value.indexOf("Multirespuesta") != -1)) {
		//habilitamos el campo de texto de la primera respuesta
		document.getElementsByName("answer"+ultimoIdQuestion)[document.getElementsByName("answer"+ultimoIdQuestion).length-1].disabled = false;

		//mostramos los botones de añadir y eliminar respuestas
		document.getElementsByName("addAnswer"+ultimoIdQuestion)[0].setAttribute("style", "display: inline");
		document.getElementsByName("delAnswer"+ultimoIdQuestion)[0].setAttribute("style", "display: inline");
		document.getElementsByName("delAllAnswers"+ultimoIdQuestion)[0].setAttribute("style", "display: inline");
	} else if (document.getElementsByName("kindAnswerSelector"+ultimoIdQuestion)[0].value.indexOf("Respuesta abierta") != -1) {
		//ocultamos los botones de añadir y eliminar respuestas
		document.getElementsByName("addAnswer"+ultimoIdQuestion)[0].setAttribute("style", "display: none");
		document.getElementsByName("delAnswer"+ultimoIdQuestion)[0].setAttribute("style", "display: none");
		document.getElementsByName("delAllAnswers"+ultimoIdQuestion)[0].setAttribute("style", "display: none");

		deleteAnswers();

		document.getElementsByName("answer"+ultimoIdQuestion)[0].disabled = true;
		document.getElementsByName("answer"+ultimoIdQuestion)[0].value = "";
	}
}

/**
  * ESPECIFICACIÓN: Función que elimina todas las respuestas añadidas excepto la primera
  **/
function deleteAnswers() {
	var questions = document.getElementsByName("surveyQuestion");
	var ultimoIdQuestion = parseInt(document.getElementsByName("surveyQuestion")[questions.length-1].getAttribute("id"));

	//obtener el total de respuestas actual
	var answers = document.getElementsByName("answer"+ultimoIdQuestion);
	var len = answers.length;

	//comprobamos si hay más de una respuesta
	if (len > 1) {
		//recorremos todos las respuestas eliminándolas una a una empezando por la segunda
		for (i=1 ; i < len ; i++) {
			//nos situamos en el padre e eliminamos el hijo correspondiente (la respuesta)
			var padre = answers[1].parentNode;
			padre.removeChild(answers[1]);
		}
	}
}


/**
 * ESPECIFICACIÓN: Función que busca y elimina todos aquellos campos de respuestas
 * que estén vacíos (excepto la primera respuesta)
 **/
function deleteEmptyAnwers() {
	var questions = document.getElementsByName("surveyQuestion");
	var ultimoIdQuestion = parseInt(document.getElementsByName("surveyQuestion")[questions.length-1].getAttribute("id"));

	//obtener el total de respuestas actual
	var answers = document.getElementsByName("answer"+ultimoIdQuestion);
	var len = answers.length;

	//comprobamos si hay más de una respuesta
	if (len > 1) {
		//recorremos una a una todas las respuestas empezando por la segunda comprobando si están vacías. Las que
		//estén vacias 
		for (i=len-1 ; i > 0 ; i--) {
			//comprobamos si el campo actual que estamos comprobando está vacío
			if (answers[i].value == "") {
				//nos situamos en el padre e eliminamos el hijo correspondiente (la respuesta)
				var padre = answers[i].parentNode;
				padre.removeChild(answers[i]);
			}
		}
	}
}


/**
 * ESPECIFICACIÓN: Función que comprueba que todos los campos de la encuesta estén
 * correctamente introducidos antes de ser enviada
 **/
function checkSurvey() {
	var errorFind = false;
	var errorMsg = new String();
	var subject = document.getElementById("subject");
	var dueDate = document.getElementById("dueDate");

	if (subject.value.length == 0) {
		errorMsg = "'Asunto' es un campo requerido.";
		subject.focus();
		errorFind = true;
	}

	if (dueDate.value.length == 0) {
		if (errorFind) {
			errorMsg = errorMsg + "<BR>'Fecha de vencimiento' es un campo requerido.";
		} else {
			errorMsg = "'Fecha de vencimiento' es un campo requerido.";
			dueDate.focus();
			errorFind = true;
		}
	}

	//comprobamos si todas las respuestas están indicadas. En caso contrario, le indicamos al usuario
	//que deberá introducir antes el valor de todas las respuestas
	var questions = document.getElementsByName("surveyQuestion");
	var ultimoIdQuestion = parseInt(document.getElementsByName("surveyQuestion")[questions.length-1].getAttribute("id"));
	//obtenemos el total de respuestas actual
	var answers = document.getElementsByName("answer"+ultimoIdQuestion);
	var len = answers.length;
	//si la pregunta está introducida, comprobamos las respuestas
	if (document.getElementsByName("question"+ultimoIdQuestion)[0].value != '') {
		var emptys = false;
		//recorremos todos las respuestas hasta llegar a la última, comprobando cada una si está vacía (si no es una respuesta abierta)
		if (document.getElementsByName("kindAnswerSelector"+ultimoIdQuestion)[0].value.indexOf("Respuesta abierta") == -1) {
			for (i=0 ; i < len ; i++) { 
				if (answers[i].value == '') {
					emptys = true;
					break;
				}
			}
		}
		if (emptys) {
			if (errorFind) {
				errorMsg = errorMsg + "<BR>Algunas de las respuestas de la &uacute;ltima pregunta no contienen ning&uacute;n valor.";
			} else {
				errorMsg = "Algunas de las respuestas de la &uacute;ltima pregunta no contienen ning&uacute;n valor.";
				answers[i].focus();
				errorFind = true;
			}
		}
	} else {
		if (errorFind) {
			errorMsg = errorMsg + "<BR>La &uacute;ltima pregunta insertada no tiene ning&uacute;n valor.";
		} else {
			errorMsg = "La &uacute;ltima pregunta insertada no tiene ning&uacute;n valor.";
			document.getElementsByName("question"+ultimoIdQuestion)[0].focus();
			errorFind = true;
		}
	}

	if (errorFind) {
		document.getElementById("warning").setAttribute("style", "display: block");
		document.getElementById("warning").innerHTML = errorMsg;
	} else {
		document.getElementById("warning").setAttribute("style", "display: none");

		//Habiltamos todos los controles de las diferentes preguntas para que el archivo JSP que recibirá
		//el formulario pueda leer todos estos campos
		var questionsTexfield = document.getElementsByName("groupingQuestions");
		for (var i=0 ; i<questionsTexfield.length ; i++) {
			var question = document.getElementsByName("groupingQuestions")[i];
			var childrens = question.childNodes;
			for(var j=0 ; j<childrens.length ; j++) {
				if (childrens[j].tagName == "DIV") {
					var childrensDiv = childrens[j].childNodes;
					for(var k=0 ; k<childrensDiv.length ; k++) {
						childrensDiv[k].disabled = false;
					}
				}
			}
		}

		document.getElementById("surveyForm").submit();
	}
}
